﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using ProcessoSeletivo.DAO;

public partial class InscricaoCad : System.Web.UI.Page
{
    #region " Load "

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["cpfCandidato"] == null)
        {
            Response.Redirect("default.aspx");
        }

        if (!IsPostBack)
        {
            DataView lDataView;

            using (Processo objProcesso = new Processo())
            {
                string num = "1";
                string ano = DateTime.Now.Year.ToString();

                if (DateTime.Now.Month > 4 && DateTime.Now.Month < 10)
                {
                    num = "2";
                }
                else
                {
                    if (DateTime.Now.Month >= 10)
                    {
                        ano = DateTime.Now.AddYears(1).Year.ToString();
                    }
                }

                lDataView = objProcesso.ConsultarProcessoPorDescricao(ano + '.' + num);


                if (lDataView.Table.Rows.Count > 0)
                {
                    ViewState["cod_processo_pro"] = lDataView.Table.Rows[0]["cod_processo_pro"];
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "alerta", "alert('Não existe processo para inscrição!');window.location.href='default.aspx';", true);
                }
            }

            Session["Acao"] = true;

            ViewState["cod_endereco_end"] = -1;
            ViewState["cod_inscricao_ins"] = -1;

            if (Request["cod_candidato_can"] == null)
            {
                lblTitulo.Text = "Inclusão de candidato";
                txtCPF.Text = Session["cpfCandidato"].ToString();
            }
            else
            {
                btnReimpressao.Visible = true;
                lblTitulo.Text = "Alteração de candidato";

                chxEdital.Checked = true;

                #region " Candidato "

                using (Candidato objCand = new Candidato())
                {
                    lDataView = objCand.ConsultarCandidato(Convert.ToInt32(Request["cod_candidato_can"]));

                    if (lDataView.Table.Rows.Count > 0)
                    {
                        txtNome.Text = lDataView.Table.Rows[0]["nom_candidato_can"].ToString();
                        TxtDtNascimento.Text = lDataView.Table.Rows[0]["dat_nascimento_can"].ToString();
                        txtRg.Text = lDataView.Table.Rows[0]["num_rg_can"].ToString();
                        ddlOrgaoEmissor.SelectedValue = lDataView.Table.Rows[0]["des_emissor_rg_can"].ToString();
                        ddlUf_rg.SelectedValue = lDataView.Table.Rows[0]["nom_uf_rg_est"].ToString();
                        txtCPF.Text = lDataView.Table.Rows[0]["num_cpf_can"].ToString();
                        rblSexo.SelectedValue = lDataView.Table.Rows[0]["des_sexo_can"].ToString();
                        txtTelefone.Text = lDataView.Table.Rows[0]["num_telefone_can"].ToString();
                        txtCelular.Text = lDataView.Table.Rows[0]["num_celular_can"].ToString();
                        txtEmail.Text = lDataView.Table.Rows[0]["des_email_can"].ToString();
                        ddlConvenio.SelectedValue = lDataView.Table.Rows[0]["cod_convenio_con"].ToString();
                        txtNomeEscola.Text = lDataView.Table.Rows[0]["nom_colegio_can"].ToString();
                        txtAnoConclusao.Text = lDataView.Table.Rows[0]["num_ano_conclusao_can"].ToString();
                        txtEnem.Text = lDataView.Table.Rows[0]["num_inscricao_enem_can"].ToString();
                        ddlAnoEnem.SelectedValue = lDataView.Table.Rows[0]["num_ano_enem_can"].ToString();
                        tip_lingua_estrangeira_can.SelectedValue = lDataView.Table.Rows[0]["tip_lingua_estrangeira_can"].ToString();
                        txtEmail.Text = lDataView.Table.Rows[0]["des_email_can"].ToString();
                        ddlUFEscola.SelectedValue = lDataView.Table.Rows[0]["nom_uf_est"].ToString();
                        ddlCidadeEscola.SelectedValue = lDataView.Table.Rows[0]["cod_cidade_colegio_cid"].ToString();
                        ddlConvenio.SelectedValue = lDataView.Table.Rows[0]["cod_convenio_con"].ToString();
                        ViewState["cod_endereco_end"] = lDataView.Table.Rows[0]["cod_endereco_end"];
                        ViewState["cod_candidato_can"] = Request["cod_candidato_can"];

                        if (txtEnem.Text != "")
                        {
                            chkEnem.Checked = true;
                            txtNome.Focus();
                        }
                    }
                    else
                    {
                        Response.Redirect("default.aspx");
                    }
                }

                #endregion

                #region " Endereco "

                using (Endereco objEnd = new Endereco())
                {
                    lDataView = objEnd.ConsultarEndereco(Convert.ToInt32(ViewState["cod_endereco_end"]));

                    if (lDataView.Table.Rows.Count > 0)
                    {
                        txtLogradouro.Text = lDataView.Table.Rows[0]["des_logradouro_end"].ToString();
                        txtBairro.Text = lDataView.Table.Rows[0]["des_bairro_end"].ToString();
                        ddlUF.SelectedValue = lDataView.Table.Rows[0]["nom_uf_est"].ToString();
                        ddlCidade.SelectedValue = lDataView.Table.Rows[0]["cod_cidade_cid"].ToString();
                        txtComplemento.Text = lDataView.Table.Rows[0]["des_complemento_end"].ToString();
                        txtCEP.Text = lDataView.Table.Rows[0]["num_cep_end"].ToString();
                        txtNumero.Text = lDataView.Table.Rows[0]["num_endereco_end"].ToString();
                    }
                }

                #endregion

                #region " PneCandidato "

                using (PneCandidato objPC = new PneCandidato())
                {
                    lDataView = objPC.ListarPneCandidatoPorCandidato(Convert.ToInt32(ViewState["cod_candidato_can"]));

                    if (lDataView.Table.Rows.Count > 0)
                    {
                        ddlPne.SelectedValue = lDataView.Table.Rows[0]["cod_pne_pne"].ToString();
                        if (lDataView.Table.Rows[0]["des_pne_pne"].ToString().IndexOf("Outras") > -1)
                        {
                            txtPne.Text = lDataView.Table.Rows[0]["des_outras_pca"].ToString();
                            txtPne.Visible = true;
                        }
                    }
                }

                #endregion

                #region " DivulgacaoCandidato "

                using (DivulgacaoCandidato objDC = new DivulgacaoCandidato())
                {
                    lDataView = objDC.ListarDivulgacaoCandidatoPorCandidato(Convert.ToInt32(ViewState["cod_candidato_can"]));

                    if (lDataView.Table.Rows.Count > 0)
                    {
                        ddlDivulgacao.SelectedValue = lDataView.Table.Rows[0]["cod_divulgacao_div"].ToString();
                        if (lDataView.Table.Rows[0]["des_outras_dca"].ToString().IndexOf("Outros") > -1)
                        {
                            txtDivulgacao.Text = lDataView.Table.Rows[0]["des_outras_dca"].ToString();
                            txtDivulgacao.Visible = true;
                        }
                    }
                }

                #endregion

                #region " Dados Candidato "

                using (DadosCandidato objDC = new DadosCandidato())
                {
                    lDataView = objDC.ListarDadosCandidatoPorCandidato(Convert.ToInt32(ViewState["cod_candidato_can"]));
                }

                if (lDataView.Table.Rows.Count > 0)
                {
                    ddlCurso.SelectedValue = lDataView.Table.Rows[0]["cod_curso_cur"].ToString();
                    ddlCurso2.SelectedValue = lDataView.Table.Rows[1]["cod_curso_cur"].ToString();
                }

                #endregion

                #region " InscricaoCandidato "

                using (InscricaoCandidato objIC = new InscricaoCandidato())
                {
                    lDataView = objIC.ConsultarInscricaoPorCandidato(Convert.ToInt32(Request["cod_candidato_can"]));

                    if (lDataView.Table.Rows.Count > 0)
                    {
                        ViewState["cod_inscricao_ins"] = lDataView.Table.Rows[0]["cod_inscricao_ins"].ToString();
                    }
                }

                #endregion
            }
        }

        pnlEnem.Visible = chkEnem.Checked;
        RFVEnem.Visible = chkEnem.Checked;
    }

    #endregion

    #region " Botões "

    protected void btnInscrever_Click(object sender, EventArgs e)
    {
        if (chxEdital.Checked)
        {
            if (ddlCurso.SelectedValue != "-1" && ddlCurso2.SelectedValue != "-1")
            {
                if ((bool)Session["Acao"])
                {
                    DataSet lDataSet;
                    int cod_endereco_end = Convert.ToInt32(ViewState["cod_endereco_end"]);
                    int cod_candidato_can = Convert.ToInt32(ViewState["cod_candidato_can"]);
                    int cod_inscricao_ins = Convert.ToInt32(ViewState["cod_inscricao_ins"]);
                    int cod_processo_pro = Convert.ToInt32(ViewState["cod_processo_pro"]);

                    #region " Endereco "

                    using (Endereco objEnd = new Endereco())
                    {
                        lDataSet = objEnd.ConsultarEndereco(cod_endereco_end).Table.DataSet;

                        if (cod_endereco_end == -1)
                        {
                            lDataSet.Tables[0].Rows.Add(lDataSet.Tables[0].NewRow());
                        }

                        lDataSet.Tables[0].Rows[0]["des_logradouro_end"] = txtLogradouro.Text;
                        lDataSet.Tables[0].Rows[0]["des_bairro_end"] = txtBairro.Text;
                        lDataSet.Tables[0].Rows[0]["cod_cidade_cid"] = ddlCidade.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["des_complemento_end"] = txtComplemento.Text;
                        lDataSet.Tables[0].Rows[0]["num_cep_end"] = txtCEP.Text;
                        lDataSet.Tables[0].Rows[0]["nom_uf_est"] = ddlUF.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["num_endereco_end"] = txtNumero.Text;

                        if (cod_endereco_end == -1)
                        {
                            cod_endereco_end = objEnd.IncluirEndereco(lDataSet);
                        }
                        else
                        {
                            lDataSet.Tables[0].Rows[0]["cod_endereco_end"] = cod_endereco_end;
                            objEnd.AlterarEndereco(lDataSet);
                        }
                    }

                    #endregion

                    #region " Candidato "

                    using (Candidato objCand = new Candidato())
                    {
                        lDataSet = objCand.ConsultarCandidato(-1).Table.DataSet;
                        lDataSet.Tables[0].Rows.Add(lDataSet.Tables[0].NewRow());

                        lDataSet.Tables[0].Rows[0]["nom_candidato_can"] = txtNome.Text;
                        lDataSet.Tables[0].Rows[0]["dat_nascimento_can"] = TxtDtNascimento.Text;
                        lDataSet.Tables[0].Rows[0]["num_rg_can"] = txtRg.Text;
                        lDataSet.Tables[0].Rows[0]["des_emissor_rg_can"] = ddlOrgaoEmissor.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["nom_uf_rg_est"] = ddlUf_rg.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["num_cpf_can"] = txtCPF.Text;
                        lDataSet.Tables[0].Rows[0]["des_sexo_can"] = rblSexo.Text;
                        lDataSet.Tables[0].Rows[0]["num_telefone_can"] = txtTelefone.Text;
                        lDataSet.Tables[0].Rows[0]["num_celular_can"] = txtCelular.Text;
                        lDataSet.Tables[0].Rows[0]["des_email_can"] = txtEmail.Text;
                        lDataSet.Tables[0].Rows[0]["cod_endereco_end"] = cod_endereco_end;
                        lDataSet.Tables[0].Rows[0]["cod_convenio_con"] = ddlConvenio.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["flg_aprovado_can"] = 0;
                        lDataSet.Tables[0].Rows[0]["tip_lingua_estrangeira_can"] = tip_lingua_estrangeira_can.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["nom_colegio_can"] = txtNomeEscola.Text;
                        lDataSet.Tables[0].Rows[0]["cod_cidade_colegio_cid"] = ddlCidadeEscola.SelectedValue;
                        lDataSet.Tables[0].Rows[0]["num_ano_conclusao_can"] = txtAnoConclusao.Text;

                        if (chkEnem.Checked)
                        {
                            lDataSet.Tables[0].Rows[0]["num_inscricao_enem_can"] = txtEnem.Text;
                            lDataSet.Tables[0].Rows[0]["num_ano_enem_can"] = ddlAnoEnem.SelectedValue;
                        }
                        else
                        {
                            lDataSet.Tables[0].Rows[0]["num_inscricao_enem_can"] = DBNull.Value;
                            lDataSet.Tables[0].Rows[0]["num_ano_enem_can"] = DBNull.Value;
                        }

                        if (Request["cod_candidato_can"] == null)
                        {
                            cod_candidato_can = objCand.IncluirCandidato(lDataSet);
                        }
                        else
                        {
                            lDataSet.Tables[0].Rows[0]["cod_candidato_can"] = Request["cod_candidato_can"];
                            objCand.AlterarCandidato(lDataSet);
                        }
                    }

                    #endregion

                    #region " PneCandidato "

                    using (PneCandidato objPneCand = new PneCandidato())
                    {
                        //Exclui todas as PNE associadas para o candidato
                        objPneCand.ExcluirPneCandidatoPorCandidato(cod_candidato_can);

                        if (ddlPne.SelectedValue != "-1")
                        {
                            objPneCand.IncluirPneCandidato(Convert.ToInt32(ddlPne.SelectedValue), cod_candidato_can, txtPne.Text);
                        }
                    }

                    #endregion

                    #region " DivulgacaoCandidato "

                    using (DivulgacaoCandidato objDivCand = new DivulgacaoCandidato())
                    {
                        //Exclui todas as Divulgações associadas para o candidato
                        objDivCand.ExcluirDivulgacaoCandidatoPorCandidato(cod_candidato_can);

                        if (ddlDivulgacao.SelectedValue != "-1")
                        {
                            objDivCand.IncluirDivulgacaoCandidato(Convert.ToInt32(ddlDivulgacao.SelectedValue), cod_candidato_can, txtDivulgacao.Text);
                        }
                    }

                    #endregion

                    #region " InscricaoCandidato "

                    using (InscricaoCandidato objInsc = new InscricaoCandidato())
                    {
                        lDataSet = objInsc.ConsultarInscricao(-1).Table.DataSet;
                        lDataSet.Tables[0].Rows.Add(lDataSet.Tables[0].NewRow());

                        lDataSet.Tables[0].Rows[0]["flg_isento_ins"] = 0;

                        if (cod_inscricao_ins == -1)
                        {
                            cod_inscricao_ins = objInsc.IncluirInscricao(lDataSet);
                        }
                        else
                        {
                            lDataSet.Tables[0].Rows[0]["cod_inscricao_ins"] = cod_inscricao_ins;
                            objInsc.AlterarInscricao(lDataSet);
                        }

                        Session["cod_inscricao_ins"] = cod_inscricao_ins;
                    }

                    #endregion

                    #region " Dados Candidato "

                    using (DadosCandidato objDC = new DadosCandidato())
                    {
                        objDC.ExcluirDadosCandidatoPorCandidato(cod_candidato_can);

                        objDC.IncluirDadosCandidato(Convert.ToInt32(ddlCurso.SelectedValue), cod_candidato_can, cod_processo_pro, cod_inscricao_ins, 1);
                        objDC.IncluirDadosCandidato(Convert.ToInt32(ddlCurso2.SelectedValue), cod_candidato_can, cod_processo_pro, cod_inscricao_ins, 2);
                    }

                    #endregion

                    Session["Acao"] = false;
                }

                Response.Redirect("GerarBoleto.aspx");
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "block", "alert('É necessário selecionar a 1º e a 2º opção de curso!')", true);
            }
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "block", "alert('É necessário concordar com os termos do edital!')", true);
        }
    }

    #endregion

    #region " Métodos gerais "

    protected bool CandidatoJaCadastrado(string cpf)
    {
        //return CandidatoSearcher.GetByCPF(cpf) != null;
        return true;
    }

    #endregion

    #region " DDL "

    protected void ddlPne_SelectedIndexChanged(object sender, EventArgs e)
    {
        string PNE = ddlPne.SelectedItem.Text.ToLower();

        txtPne.Visible = PNE.IndexOf("outras") > -1;
    }

    protected void ddlDivulgacao_SelectedIndexChanged(object sender, EventArgs e)
    {
        string DIV = ddlDivulgacao.SelectedItem.Text.ToLower();

        txtDivulgacao.Visible = DIV.IndexOf("outros") > -1;
    }

    #endregion
}